package com.molichuxing.gateway.api.services;

import java.util.List;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.framework.result.ResponseResult;
import com.molichuxing.gateway.bff.car.entity.request.create.AccidentCaseCreateBffVo;
import com.molichuxing.gateway.bff.car.entity.request.create.AccidentCreateBffVo;
import com.molichuxing.gateway.bff.car.entity.request.create.MaintenanceLogCreateVo;
import com.molichuxing.gateway.bff.car.entity.response.AccidentCaseDetailVo;
import com.molichuxing.gateway.bff.car.entity.response.AccidentDetailVo;
import com.molichuxing.gateway.bff.car.entity.response.AccidentOrderCarInfoVo;
import com.molichuxing.gateway.bff.car.entity.response.AccidentPagedVo;
import com.molichuxing.gateway.bff.car.entity.response.CarDeliveryCheckVo;
import com.molichuxing.gateway.bff.car.entity.response.CarDeliveryVo;
import com.molichuxing.gateway.bff.car.entity.response.CarOrderCheckVo;
import com.molichuxing.gateway.bff.car.entity.response.CarViolationDetailAppVo;
import com.molichuxing.gateway.bff.car.entity.response.CarViolationVo;
import com.molichuxing.gateway.bff.car.entity.response.FenceCheckVo;
import com.molichuxing.gateway.bff.car.entity.response.MaintenanceAppNewVo;
import com.molichuxing.gateway.bff.car.entity.response.MaintenanceAppVo;
import com.molichuxing.gateway.bff.car.entity.response.MaintenanceLogAppVo;
import com.molichuxing.gateway.bff.car.entity.response.MaintenanceLogVo;
import com.molichuxing.gateway.bff.car.entity.response.PdiCheckVo;

/**
 * @Author: renzhengyu
 * @Description: 车辆接口
 * @Date: Created in 15:01 2019/9/19
 * @Modified By:
 **/
public interface VehicleApiService {

    /**
     * 事故列表
     * @param resultType
     * @param pageNum
     * @param pageSize
     * @return
     */
    ResponseResult<Paged<AccidentPagedVo>> getCarAccidentAppPage(Integer resultType,Integer pageNum, Integer pageSize);


    /**
     * 根据事故id获取事故报备详情
     * @param accidentId
     * @return
     */
    ResponseResult<AccidentDetailVo> getAppAccident(Integer accidentId);


    /**
     * 根据事故id获取结案详情
     * @param accidentId
     * @return
     */
    ResponseResult<AccidentCaseDetailVo> getAccidentCaseDetail(Integer accidentId);


    /**
     * 查询用户所有在用车中的车辆信息
     * @return
     */
    ResponseResult<List<AccidentOrderCarInfoVo>> getLicencePlateByUser();

    /**
     * 创建事故报备信息
     * @param accidentCreateBffVo
     * @return
     */
    ResponseResult<Boolean> createAccidentCreateBff(AccidentCreateBffVo accidentCreateBffVo);


    /**
     * 创建结案信息
     * @param accidentCaseCreateBffVo
     * @return
     */
    ResponseResult<Boolean> createAccidentCaseCreateBff(AccidentCaseCreateBffVo accidentCaseCreateBffVo);


    /**
     * 查询违章列表
     * @return
     */
    ResponseResult<List<CarViolationVo>> getCarViolationAppVo();


    /**
     * 查询违章详情
     * @param catId
     * @return
     */
    ResponseResult<CarViolationDetailAppVo> getCarViolationDetailAppVo(Integer catId);

    /**
     * 查询用户拥有车辆数
     * @return
     */
    ResponseResult<List<Integer>> getCarViolationCarCount();

    /**
     * 创建保养历史
     * @param MaintenanceLogCreateVo
     * @return
     */
    ResponseResult<Boolean> createMaintenanceLog(MaintenanceLogCreateVo MaintenanceLogCreateVo);


    /**
     * 校验当前保养信息是否是审核通过状态
     * @param maintenanceLogId
     * @return
     */
    ResponseResult<Boolean> checkStateMaintenanceLog(Integer maintenanceLogId);


    /**
     * 保养历史详情
     * @param maintenanceLogId
     * @return
     */
    ResponseResult<MaintenanceLogVo> maintenanceLogDetail(Integer maintenanceLogId);

    /**
     * 保养列表
     * @param resultType
     * @param pageNum
     * @param pageSize
     * @return
     */
    ResponseResult<MaintenanceAppVo> getMaintenanceAppVoPage(Integer resultType, Integer pageNum, Integer pageSize);
    
    /**
     * 保养列表
     * @param pageNum
     * @param pageSize
     * @return
     */
    ResponseResult<MaintenanceAppNewVo> getMaintenanceAppVoPageNew(Integer pageNum, Integer pageSize);

    /**
     * 根据订单号查询验车报告
     * @param orderCode
     * @return
     */
    ResponseResult<PdiCheckVo> getCheckReport(Long orderCode);


    /**
     * 新建交接单(大屏)
     * @param checkCreateBffVo
     * @return
     */
	// ResponseResult<Boolean> createCheckVo(String deviceNum,CheckCreateBffVo
	// checkCreateBffVo);


    /**
     *  根据车架号获取已行驶里程(大屏)
     * @param vin
     * @return
     */
    ResponseResult<Integer> getMileageByVin(String vin);

    /**
     * 交接单预览-车辆和订单信息(大屏)
     * @param orderCode
     * @return
     */
    ResponseResult<CarOrderCheckVo> getCarOrderCheckVo(Long orderCode,Integer carId);

    /**
	 * 提车交付车辆列表
	 *
	 * @param orderCode
	 * @return
	 */
    ResponseResult<List<CarDeliveryVo>> getDeliveryCarList(Long orderCode);

	/**
	 * 还车交付车辆信息
	 * 
	 * @param token
	 * @param deviceNum
	 * @param orderCode
	 * @return
	 */
	ResponseResult<List<CarDeliveryVo>> getReturnCar(String token, String deviceNum, Long orderCode);

	/**
	 * 验证车辆是否在门店围栏
	 * 
	 * @param token
	 * @param deviceNum
	 * @param carId
	 * @return
	 */
	ResponseResult<FenceCheckVo> fenceCheck(String token, String deviceNum, Integer carId);

	/**
	 * 交付车辆检验
	 * 
	 * @param token
	 * @param deviceNum
	 * @param carId
	 * @return
	 */
	ResponseResult<CarDeliveryCheckVo> carDeliveryCheck(String token, String deviceNum, Integer carId);

	 /**
     * 保养列表（历史）
     * @param pageNum
     * @param pageSize
     * @return
     */
	ResponseResult<Paged<MaintenanceLogAppVo>> getMaintenanceLogAppVoPage(Integer pageNum, Integer pageSize);

}
